#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''数组维数转换

历史:
    2017-12-02 姚彧 创建
    2017-12-06 ...  加入一维数组转换支持
                    数组同维度时直接返回
    2017-12-15 ...  转为浮点数
'''


__all__ = ['to2d', 'to3d', 'to4d']


import numpy as np


def _tond(datas: np.ndarray, size: int) -> np.ndarray:
    '''一般数组转n维数组'''
    assert 2 <=  size <= 4
    datas = np.asarray(datas, dtype = float)
    shape = datas.shape
    if len(shape) > 1:
        # ---------------------
        # 数组同维度时直接返回
        if shape[1] == size:
            return datas
        # 数组同维度时直接返回
        # ---------------------
        res = np.zeros((shape[0], size), dtype = float)
        size = min(shape[1], size)
        res[:, :size] = datas[:, :size]
    else:
        # ---------------------
        # 数组同维度时直接返回
        if shape[0] == size:
            return datas
        # 数组同维度时直接返回
        # ---------------------

        # 加入一维数组转换支持
        res = np.zeros(size, dtype = float)
        size = min(shape[0], size)
        res[:size] = datas[:size]
        # 加入一维数组转换支持
        # ---------------------
    return res


def to4d(datas: np.ndarray) -> np.ndarray:
    '''一般数组转齐次数组'''
    res = _tond(datas, 4)
    if len(res.shape) > 1:
        res[:, -1] = 1
    else:
        # ---------------------
        # 加入一维数组转换支持
        res[-1] = 1
        # 加入一维数组转换支持
        # ---------------------
    return res


def to3d(datas: np.ndarray) -> np.ndarray:
    '''一般数组转3维数组'''
    return _tond(datas, 3)


def to2d(datas: np.ndarray) -> np.ndarray:
    '''一般数组转2维数组'''
    return _tond(datas, 2)
